#ifndef TERRAIN_H_INCLUDED
#define TERRAIN_H_INCLUDED

#include <stdio.h>
#include <malloc.h>
#include <assert.h>

/** @struct sTerrain
    @brief Structure représentant un Terrain
    @param dim dimension du Terrain
    @param tab Tableau de deux dimensions représentant notre Terrain
*/

struct sTerrain
{
    int dim;
    char ** tab;
}; typedef struct sTerrain Terrain;

/** @fn void terInitialiser(Terrain * pTer)
    @brief  Initialise un terrain de dimension dim*dim
    @param pTer [IN-OUT] pointeur sur une structure \e Terrain
*/
void terInitialiser(Terrain * pTer);

/** @fn terLiberer(Terrain * pTer)
    @brief Libère les éléments d'une structure \e Terrain
    @param pTer [IN-OUT] pointeur sur une structure \e Terrain
*/

void terLiberer(Terrain * pTer);

/** @fn terPositionValide(const Terrain * pTer, const int x,const int y)
    @brief Fonction qui  permet de tester si la position d'une lettre  est valide
    @param pTer [IN] pointeur sur une structure \e Terrain
    @param x [IN] abscisse de la case
    @param y [IN] ordonnée de la case
*/

const int terPositionValide(const Terrain * pTer, const int x,const int y);

/** @fn terGetXY(const Terrain * pTer, const int x,const int y)
    @brief Fonction renvoyant le caractère qui se trouve à la position (x,y)
    @param pTer [IN] pointeur sur une structure \e Terrain
    @param x [IN] abscisse de la case
    @param y [IN] ordonnée de la case
    @return Renvoie un char correspondant au caractère de la position (x,y)

*/
const char terGetXY(const Terrain * pTer, const int x,const int y);

/** @fn  terSetXY(Terrain * pTer, const int x,const int y, const char lettre)
    @brief terSetXY fonction ajoutant à la positon (x,y) le caractère passé en paramètre
    @param pTer [IN-OUT] pointeur sur une structure \e Terrain
    @param x [IN] abscisse de la case
    @param y [IN] ordonnée de la case
    @param lettre [IN] caractère que l'on souhaite rajouter

*/

void terSetXY(Terrain * pTer, const int x,const int y, const char lettre);

/** @fn getDim(const Terrain * pTer);
    @brief Fonction renvoyant la dimension du terrain
    @param [IN] pTer pointeur sur une structure \e Terrain
*/
const int getDim(const Terrain * pTer);

void testRegresion_Terrain();

#endif
